package cxydmmszl.chapter09.t165;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * <li style="color: red;">Prob</li>
 * 1 到 n 中 1 出现的次数
 * <li style="color: green;">Desc</li>
 * 给定一个整数 n，返回从 1 到 n 的数字中 1 出现的个数。<br/>
 * 例如：<br/>
 * n=5，1∼n 为 1,2,3,4,5。那么 1 出现了 1 次，所以返回1。<br/>
 * n=11，1∼n 为 1,2,3,4,5,6,7,8,9,10,11。
 * 那么1出现的次数为1(出现1次)，10(出现1次)，11(有两个1，所以出现了2次)，所以返回4。
 * <br/><br/>备注：<br/>
 * 1⩽N⩽10^13
 * <li style="color: green;">Input</li>
 * 输入一个整数 N。
 * <li style="color: green;">Output</li>
 * 输出一个整数表示答案。
 * <li style="color: blue;">Link</li> CD72
 *
 * @author habitplus
 * @since 2021-10-16 15:49
 */
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        long n = Long.parseLong(br.readLine());

        long ans = countOne(n);
        System.out.println(ans);
    }

    private static long countOne(long n) {
        if (n < 1) return 0;

        int len = length(n);
        if (len == 1) return 1;
        long tmp1 = (long) Math.pow(10, len - 1);
        long first = n / tmp1;
        long firstOneNum = first == 1 ? n % tmp1 + 1 : tmp1;
        long otherOneNum = first * (len - 1) * (tmp1 / 10);
        return firstOneNum + otherOneNum + countOne(n % tmp1);
    }

    private static int length(long n) {
        int l = 0;
        while (n != 0) {
            l++;
            n /= 10;
        }
        return l;
    }
}
